<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>合并区间</title>
  </head>
  <body>
    <script>
      //     以数组 intervals 表示若干个区间的集合，其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间，并返回 一个不重叠的区间数组，该数组需恰好覆盖输入中的所有区间 。

      //

      // 示例 1：

      // 输入：intervals = [[1,3],[2,6],[8,10],[15,18]]
      // 输出：[[1,6],[8,10],[15,18]]
      // 解释：区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
      // 示例 2：

      // 输入：intervals = [[1,4],[4,5]]
      // 输出：[[1,5]]
      // 解释：区间 [1,4] 和 [4,5] 可被视为重叠区间。

      // 来源：力扣（LeetCode）
      // 链接：https://leetcode.cn/problems/merge-intervals
      // 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

      /**
       * @param {number[][]} intervals
       * @return {number[][]}
       */
      var merge = function (intervals) {
        intervals.sort((a, b) => {
          return a[0] - b[0]
        })
        let i = 1
        while (i < intervals.length) {
          if (intervals[i][0] >= intervals[i - 1][0] && intervals[i][0] <= intervals[i - 1][1]) {
            if (intervals[i - 1][1] <= intervals[i][1]) {
              intervals[i - 1][1] = intervals[i][1]
              intervals.splice(i, 1)
            } else if (intervals[i - 1][1] > intervals[i][1]) {
              intervals.splice(i, 1)
            }
          } else i++
        }
        return intervals
      }
      const arr = merge([
        [1, 3],
        [2, 6],
        [8, 10],
        [15, 18],
      ])
      console.log(arr)
    </script>
  </body>
</html>
